1. Field of the Invention
The present invention generally relates to parallel computing and, more specifically, to register allocation for clustered multi-level register files.
2. Description of the Related Art
Computer processors oftentimes utilize register files as a scratch space for performing computations. Register files are typically configured for speed and are typically physically close to clusters of functional units that perform calculations. Some parallel processing systems having multiple clusters of functional units utilize a multiple level hierarchy of register files.
A multiple level hierarchy provides some register files at the bottom of the hierarchy (“low-level register files”) that are physically close to the functional units and other register files at the top of the hierarchy (“high-level register files”) that are physically farther from the functional units. Values in low-level register files require less time and energy to access than values in high-level register files. For simplicity of design and for speed, low-level register files may be accessible only to a single cluster of functional units, while high-level register files may be accessible to a larger number of clusters of functional units.
While values may be stored in low-level register files to reduce energy consumption and for speed, values stored in low-level register files may be needed by multiple clusters that do not necessarily have direct access to the low-level register files in which the values are stored. Therefore, techniques are generally used to ensure that values that are needed by multiple clusters of functional units are actually available to all of those multiple clusters of functional units.
Some current techniques for making values available to more than one cluster of functional units ensure that all values that are utilized by multiple clusters of functional units are stored in high-level register files to allow more than one cluster of functional units to access the values. While storing values utilized by multiple functional units in a high-level register file helps to ensure that values needed by multiple clusters of functional units are accessible to those multiple clusters of functional units, accessing high-level register files requires more time and energy than accessing low-level register files. Further, some values that are used by multiple clusters of functional units are used primarily by a single cluster of functional units, with some ancillary accesses made by other clusters of functional units.
Therefore, one drawback of techniques in which all values utilized by multiple clusters of functional units are stored in high-level register files is that, although values utilized primarily by a single cluster of functional units may have only a few ancillary accesses by other functional units, the values used primarily by the single functional unit are stored in high-level register files. As high-level register files have higher access energy and higher access time than low-level register files, employing techniques in which all values utilized by multiple clusters of functional units are stored in high-level register files may miss opportunities for optimization in terms of reduction of access time and access energy.
As the foregoing illustrates, what is needed in the art is a technique for improving the utilization of a multiple level register file hierarchy by multiple clusters of functional units.